3.2: Menguji Aplikasi Anda
Materi:
- Pengantar
- Tentang pengujian
- Mempersiapkan pengujian
- Membuat dan menjalankan pengujian unit
- Praktik Terkait
- Ketahui Selengkapnya
Dalam bab ini Anda akan mendapatkan ringkasan pengujian Android, serta tentang membuat dan menjalankan pengujian unit lokal di Android Studio bersama JUnit.
Tentang pengujian
Meskipun memiliki aplikasi yang dikompilasi, dijalankan dan terlihat seperti yang diinginkan pada perangkat lain, Anda harus memastikan bahwa aplikasi akan berperilaku seperti yang diharapkan dalam setiap situasi, terutama saat aplikasi tumbuh dan berubah. Bahkan jika Anda mencoba menguji aplikasi secara manual setiap kali membuat perubahan — prospek yang membosankan — Anda mungkin melewatkan sesuatu atau tidak mengantisipasi hal yang mungkin dilakukan pengguna akhir dengan aplikasi tersebut sehingga menyebabkan kegagalan.
Menulis dan menjalankan pengujian adalah bagian penting dari proses development perangkat lunak. "Test-Driven Development" (TDD) atau Pengembangan yang Digerakkan oleh Pengujian adalah filosofi development perangkat lunak populer yang menempatkan pengujian pada inti dari semua development perangkat lunak untuk aplikasi atau layanan. Ini tidak menghilangkan kebutuhan akan pengujian lebih jauh, namun hanya memberikan dasar yang kuat untuk digunakan.
Pengujian kode bisa membantu Anda menemukan masalah lebih awal di development—bila masalah sangat mahal untuk diatasi—dan meningkatkan ketangguhan kode saat aplikasi menjadi lebih besar dan lebih kompleks. Dengan beberapa pengujian dalam kode, Anda bisa menguji beberapa bagian kecil aplikasi secara terpisah, dan dengan cara yang dapat diulangi serta dilakukan secara otomatis. Karena….kode yang Anda tulis untuk menguji aplikasi tidak berakhir di versi produksi aplikasi; kode hanya berada di mesin development, bersama kode aplikasi Anda di Android Studio.
Tipe pengujian
Android mendukung sejumlah pengujian yang berbeda dan kerangka kerja pengujian. Dua bentuk dasar pengujian yang didukung Android Studio adalah pengujian unit lokal dan pengujian instrumentasi.
Pengujian unit lokal adalah pengujian yang dikompilasi dan dijalankan sepenuhnya pada mesin lokal Anda dengan Java Virtual Machine (JVM). Gunakan pengujian unit lokal untuk menguji bagian-bagian aplikasi (seperti logika internal) yang tidak memerlukan akses ke kerangka kerja Android atau perangkat Android atau pun emulator, atau bagian-bagian yang bisa Anda buatkan objek palsu ("tiruan" atau stub) yang seakan-akan berperilaku seperti padanan kerangka kerja.
Pengujian instrumentasi adalah pengujian yang berjalan pada perangkat Android atau emulator. Pengujian tersebut memiliki akses ke kerangka kerja Android dan ke informasi Instrumentasi seperti Konteks aplikasi. Anda bisa menggunakan pengujian instrumentasi untuk pengujian unit, pengujian antarmuka pengguna (UI), atau pengujian integrasi, yang memastikan komponen aplikasi berinteraksi dengan aplikasi lain dengan benar. Paling umum, Anda menggunakan pengujian instrumentasi untuk pengujian UI, yang memungkinkan Anda menguji apakah aplikasi berperilaku dengan benar bila pengguna berinteraksi dengan aktivitas aplikasi atau memasukkan masukan tertentu.
Untuk sebagian besar bentuk pengujian antarmuka pengguna, Anda menggunakan kerangka kerja Espresso, yang memungkinkan Anda menulis pengujian UI otomatis. Anda akan mempelajari tentang pengujian instrumentasi dan Espresso dalam bab berikutnya.
Pengujian Unit
Pengujian unit harus menjadi pengujian mendasar dalam strategi pengujian aplikasi Anda. Dengan membuat dan menjalankan pengujian unit terhadap kode, Anda bisa memverifikasi apakah logika area atau unit kode fungsional sudah benar. Menjalankan pengujian unit setelah setiap pembangunan akan membantu Anda menemukan dan mengatasi masalah yang ditimbulkan oleh perubahan kode pada aplikasi.
Pengujian unit umumnya menguji fungsionalitas unit kemungkinan kode terkecil (yang bisa berupa metode, kelas, atau komponen) dengan cara yang bisa diulang. Buat pengujian unit bila Anda perlu memverifikasi logika kode tertentu di aplikasi. Misalnya, jika Anda melakukan pengujian unit atas kelas, pengujian mungkin akan memeriksa apakah kelas dalam keadaan yang tepat. Untuk metode, Anda mungkin menguji perilakunya untuk nilai parameter yang berbeda, terutama nol. Biasanya, unit kode diuji secara terpisah; pengujian Anda hanya memantau perubahan pada unit itu saja. Kerangka kerja tiruan seperti Mockito bisa digunakan untuk mengisolasi unit Anda dari dependensinya. Anda juga bisa menulis pengujian unit untuk Android di JUnit 4, yakni kerangka kerja pengujian unit umum untuk kode Java.
Android Testing Support Library
Android Testing Support Library menyediakan infrastruktur dan API untuk pengujian aplikasi Android, termasuk dukungan untuk JUnit 4. Dengan pustaka dukungan pengujian, Anda bisa membangun dan menjalankan kode pengujian untuk aplikasi.
Anda mungkin sudah memiliki Android Testing Support Library yang dipasang bersama Android Studio. Untuk memeriksa Android Support Repository, ikuti langkah-langkah ini:
- Di Android Studio pilih Tools > Android > SDK Manager.
- Klik tab SDK Tools, dan cari Support Repository.
- Jika perlu, perbarui atau pasang pustaka tersebut.
Kelas-kelas Android Testing Support Library berada di paket android.support.test. Ada juga API pengujian lama di android.test. Anda harus menggunakan pustaka dukungan terlebih dulu, bila diberi pilihan antara pustaka dukungan dan API lama, karena pustaka dukungan membantu membangun dan mendistribusikan pengujian secara lebih bersih dan lebih bisa diandalkan daripada pengkodean langsung terhadap API itu sendiri.
Mempersiapkan pengujian
Untuk mempersiapkan proyek bagi pengujian di Android Studio, Anda perlu:
- Menyusun pengujian di set sumber.
- Mengonfigurasi dependensi gradle proyek untuk menyertakan API yang terkait pengujian.
Set sumber Android Studio
Set sumber adalah kumpulan kode terkait dalam proyek Anda, yaitu untuk target pembangunan atau "ragam" aplikasi yang berbeda. Bila Android Studio membuat proyek, maka akan membuat tiga set sumber untuk Anda:
- Set sumber utama, untuk kode dan sumber daya aplikasi.
- Set sumber test, untuk pengujian unit lokal aplikasi.
- Set sumber androidTest, untuk pengujian instrumentasi Android.
Set sumber muncul di tampilan Android pada Android Studio pada nama paket untuk aplikasi Anda. Set sumber utama hanya menyertakan nama paket. Set sumber test dan androidTest memiliki nama paket yang masing-masing diikuti dengan (test) atau (androidTest).
Set sumber ini sesuai dengan folder dalam direktori src untuk proyek Anda. Misalnya, file untuk set sumber pengujian test ada di src/test/java.
Konfigurasilah Gradle untuk dependensi pengujian
Untuk menggunakan API pengujian unit, Anda perlu mengonfigurasi dependensi proyek. File pembangunan gradle default untuk proyek Anda menyertakan sebagian dependensi ini secara default, namun Anda mungkin perlu menambahkan dependensi lainnya untuk fitur pengujian tambahan seperti kerangka kerja pencocokan atau tiruan.
Dalam file build.gradle level atas aplikasi Anda, tetapkan pustaka-pustaka ini sebagai dependensi. Perhatikan, nomor versi untuk pustaka ini mungkin telah berubah. Jika Android Studio melaporkan pustaka yang lebih baru, perbarui nomor untuk merefleksikan versi saat ini.
dependencies {
// Required -- JUnit 4 framework
testCompile 'junit:junit:4.12'
// Optional -- hamcrest matchers
testCompile 'org.hamcrest:hamcrest-library:1.3'
// Optional -- Mockito framework
testCompile 'org.mockito:mockito-core:1.10.19'
}
Setelah menambahkan dependensi ke file build.gradle, Anda mungkin harus menyinkronkan proyek untuk melanjutkan. Klik Sync Now di Android Studio bila dikonfirmasi.
Konfigurasilah runner pengujian
Runner pengujian adalah pustaka atau serangkaian alat (bantu) yang memungkinkan pengujian terjadi dan hasilnya dicetak ke log. Proyek Android Anda memiliki akses ke runner pengujian JUnit dasar sebagai bagian dari JUnit4 API. Pustaka dukungan pengujian Android menyertakan runner pengujian untuk pengujian instrumentasi dan Espresso, AndroidJUnitRunner
, yang juga mendukung Junit 3 dan 4.
Bab ini hanya memperagakan runner default untuk pengujian unit. Untuk menyetel AndroidJUnitRunner sebagai runner pengujian default di proyek Gradle Anda, tambahkan dependensi berikut ke file build.gradle. Mungkin sudah ada dependensi di bagian defaultConfig. Jika demikian, tambahkan baris testInstrumentationRunner ke bagian tersebut.
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
Membuat dan menjalankan pengujian unit
Buat pengujian unit Anda sebagai file Java generik dengan menggunakan JUnit 4 API, dan simpan pengujian itu di set sumber test. Setiap template proyek Android Studio menyertakan set sumber dan file pengujian Java contoh yang disebut ExampleUnitTest.
Buat kelas pengujian baru
Untuk membuat file kelas pengujian baru, tambahkan file Java ke set sumber pengujian proyek Anda. File kelas pengujian untuk pengujian unit biasanya diberi nama untuk kelas dalam aplikasi yang diuji, dengan ditambahkan "Test". Misalnya, jika Anda memiliki kelas yang disebut Calculator di aplikasi, kelas untuk pengujian unit akan menjadi CalculatorTest.
Untuk menambahkan file kelas pengujian, gunakan langkah-langkah ini:
- Luaskan folder java dan folder untuk set sumber pengujian aplikasi. File kelas pengujian unit yang ada akan ditampilkan.
- Klik-kanan pada folder set sumber pengujian dan pilih New > Java Class.
- Beri nama file dan klik OK.
Tulis pengujian Anda
Gunakan sintaks dan anotasi JUnit 4 untuk menulis pengujian Anda. Misalnya, kelas pengujian yang ditampilkan di bawah ini menyertakan anotasi berikut:
- Anotasi @RunWith menunjukkan runner pengujian yang harus digunakan untuk pengujian di kelas ini.
- Anotasi @SmallTest menunjukkan bahwa pengujian ini kecil (dan cepat).
- Anotasi @Before menandakan metode sedang dipersiapkan untuk pengujian.
- Anotasi @Test menandakan metode sebagai pengujian sebenarnya.
Untuk informasi selengkapnya tentang Anotasi JUnit, lihat Dokumentasi Referensi JUnit.
@RunWith(JUnit4.class)
@SmallTest
public class CalculatorTest {
private Calculator mCalculator;
// Set up the environment for testing
@Before
public void setUp() {
mCalculator = new Calculator();
}
// test for simple addition
@Test
public void addTwoNumbers() {
double resultAdd = mCalculator.add(1d, 1d);
assertThat(resultAdd, is(equalTo(2d)));
}
}
Metode addTwoNumbers() adalah satu-satunya pengujian sebenarnya. Bagian utama pengujian unit adalah pernyataan, yang didefinisikan di sini melalui metode assertThat(). Pernyataan adalah ekspresi yang harus mengevaluasi dan menghasilkan nilai true agar lulus pengujian. JUnit 4 menyediakan sejumlah metode pernyataan, namun assertThat() adalah yang paling fleksibel, karena memungkinkan metode perbandingan serba-guna yang disebut matchers. Kerangka kerja Hamcrest umumnya digunakan untuk matchers ("Hamcrest" merupakan anagram untuk matchers). Hamcrest menyertakan sejumlah besar metode perbandingan serta memungkinkan Anda untuk menulis sendiri.
Untuk informasi selengkapnya tentang pernyataan, lihat dokumentasi referensi JUnit untuk kelas Assert. Untuk informasi selengkapnya tentang kerangka kerja hamcrest, lihat Tutorial Hamcrest.
Perhatikan, metode addTwoNumbers() dalam contoh ini hanya menyertakan satu pernyataan. Aturan umum pengujian unit adalah untuk menyediakan metode pengujian terpisah bagi setiap pernyataan individual. Pengelompokan lebih dari satu pernyataan menjadi metode tunggal bisa membuat pengujian Anda lebih sulit di-debug jika hanya satu pernyataan yang gagal, dan mengaburkan pengujian yang berhasil.
Jalankan pengujian Anda
Untuk menjalankan pengujian unit lokal, gunakan langkah-langkah ini:
- Untuk menjalankan pengujian tunggal, klik-kanan metode pengujian tersebut dan pilih Run.
- Untuk menguji semua metode di kelas pengujian, klik-kanan file pengujian di tampilan proyek dan pilih Run.
- Untuk menjalankan semua pengujian di sebuah direktori, klik-kanan pada direktori dan pilih Run tests.
Proyek akan membangun, jika perlu, dan tampilan pengujian akan muncul di bagian bawah layar. Jika semua pengujian yang dijalankan berhasil, bilah kemajuan di bagian atas tampilan akan berubah menjadi hijau. Pesan status di footer juga melaporkan "Tests Passed".
Praktik Terkait
Latihan terkait dan dokumentasi praktik ada di Dasar-Dasar Developer Android: Praktik.
Ketahui Selengkapnya
- Praktik Terbaik untuk Pengujian
- Memulai Pengujian
- Membangun Pengujian Unit Lokal
- Laman Beranda JUnit 4
- Referensi JUnit 4 API
- Laman Beranda Mockito
- Dukungan Pengujian Android - Pola Pengujian (video)
- Codelab Pengujian Android
- Android Tools Protip: Anotasi Ukuran Pengujian
- [Manfaat Menggunakan assertThat dibandingkan Metode Pern
- yataan lainnya dalam Pengujian Unit](https://objectpartners.com/2013/09/18/the-benefits-of-using-assertthat-over-other-assert-methods-in-unit-tests/)